//package com.gzdh.tang.ali.controller;
//
//
//import com.gzdh.tang.comm.constant.CommonConstant;
//import com.gzdh.tang.comm.constant.SpringContextUtils;
//import com.gzdh.tang.comm.vo.Result;
//import com.gzdh.tang.modu.util.oConvertUtils;
//import lombok.extern.slf4j.Slf4j;
//
//import org.springframework.beans.factory.annotation.Value;
//
//import org.springframework.core.env.Environment;
//import org.springframework.util.AntPathMatcher;
//import org.springframework.util.FileCopyUtils;
//import org.springframework.util.StringUtils;
//import org.springframework.web.bind.annotation.*;
//import org.springframework.web.multipart.MultipartFile;
//import org.springframework.web.multipart.MultipartHttpServletRequest;
//import org.springframework.web.servlet.HandlerMapping;
//import sun.misc.BASE64Decoder;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.*;
//import java.lang.reflect.Array;
//import java.nio.charset.StandardCharsets;
//import java.text.SimpleDateFormat;
//import java.util.*;
//
//@Slf4j
//@RestController
//@RequestMapping("/sys/common")
//public class CommonController {
//
//    @Value(value = "${file.uploadType}")
//    private String uploadType;
//
//    @Value(value = "${file.path.upload}")
//    private String uploadpath;
//
//    /**
//     * 文件上传统一方法
//     *
//     * @param request
//     * @param response
//     * @return
//     */
//    @PostMapping(value = "/upload")
//    public Result<?> upload(HttpServletRequest request, HttpServletResponse response) {
//        Result<?> result = new Result<>();
//        String savePath = "";
//        String bizPath = request.getParameter("biz");
//        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
//        MultipartFile file = multipartRequest.getFile("file");// 获取上传文件对象
//        if (oConvertUtils.isEmpty(bizPath)) {
//            assert file != null;
//            double fileSize = (double) file.getSize() / 1024;
//            /*if(fileSize > 50){
//                return Result.error("上传文件只能限制50KB以内");
//            }*/
//            if (CommonConstant.UPLOAD_TYPE_OSS.equals(uploadType)) {
//                //未指定目录，则用阿里云默认目录 upload
//                bizPath = "upload";
//                //result.setMessage("使用阿里云文件上传时，必须添加目录！");
//                //result.setSuccess(false);
//                //return result;
//            } else {
//                bizPath = "";
//            }
//        }
//        if (CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)) {
//            //update-begin-author:lvdandan date:20200928 for:修改JEditor编辑器本地上传
//            savePath = this.uploadLocal(file, bizPath);
//            //update-begin-author:lvdandan date:20200928 for:修改JEditor编辑器本地上传
//            /**  富文本编辑器及markdown本地上传时，采用返回链接方式
//             //针对jeditor编辑器如何使 lcaol模式，采用 base64格式存储
//             String jeditor = request.getParameter("jeditor");
//             if(oConvertUtils.isNotEmpty(jeditor)){
//             result.setMessage(CommonConstant.UPLOAD_TYPE_LOCAL);
//             result.setSuccess(true);
//             return result;
//             }else{
//             savePath = this.uploadLocal(file,bizPath);
//             }
//             */
//        } else {
//            //update-begin-author:taoyan date:20200814 for:文件上传改造
////            savePath = CommonUtils.upload(file, bizPath, uploadType);
//            //update-end-author:taoyan date:20200814 for:文件上传改造
//        }
//        if (oConvertUtils.isNotEmpty(savePath)) {
//            result.setMessage(savePath);
//            result.setSuccess(true);
//        } else {
//            result.setMessage("上传失败！");
//            result.setSuccess(false);
//        }
//        return result;
//    }
//
//    @PostMapping("/base64Upload")
//    public Result<Object> base64Upload(@RequestParam("base64Data") String base64Data,
//                                       @RequestParam(value = "bizPath", required = false) String bizPath,
//                                       @RequestParam(value = "name", required = false) String name) {
//        Result<Object> result = new Result<>();
//        log.info("==上传图片==");
////        log.info("==接收到的数据==" + base64Data);
//        String ctxPath = uploadpath;
//        String fileName = null;
//        String dataPrix = ""; //base64格式前头
//        String data = "";//实体部分数据
//        if (base64Data == null || "".equals(base64Data)) {
//            return Result.error("上传失败，上传图片数据为空");
//        } else {
//            String[] d = base64Data.split("base64,");//将字符串分成数组
//            if (d != null && d.length == 2) {
//                dataPrix = d[0];
//                data = d[1];
//            } else {
//                return Result.error(401, "上传失败，数据不合法");
//            }
//        }
//        String suffix = "";//图片后缀，用以识别哪种格式数据
//        //编码的jpeg图片数据
//        if ("data:image/jpeg;".equalsIgnoreCase(dataPrix)) {
//            suffix = ".jpg";
//        } else if ("data:image/x-icon;".equalsIgnoreCase(dataPrix)) {
//            //编码的icon图片数据
//            suffix = ".ico";
//        } else if ("data:image/gif;".equalsIgnoreCase(dataPrix)) {
//            //编码的gif图片数据
//            suffix = ".gif";
//        } else if ("data:image/png;".equalsIgnoreCase(dataPrix)) {
//            //编码的png图片数据
//            suffix = ".png";
//        } else {
//            return Result.error("上传图片格式不合法");
//        }
//        BASE64Decoder decoder = new BASE64Decoder();
//        try {
//            //Base64解码
//            byte[] b = decoder.decodeBuffer(data);
//            for (int i = 0; i < b.length; ++i) {
//                if (b[i] < 0) {
//                    //调整异常数据
//                    b[i] += 256;
//                }
//            }
//            String filePath = "";
//            if (bizPath != null) {
//                filePath = ctxPath + File.separator + bizPath + File.separator;
//            } else {
//                filePath = ctxPath + File.separator;
//            }
//            File file = new File(filePath);
//            if (!file.exists()) {
//                file.mkdirs();// 创建文件根目录
//            }
//            Random r = new Random(1);
//            String orgName = String.valueOf(r.nextInt(100));
////            orgName = CommonUtils.getFileName(orgName);
////            if (orgName.indexOf(".") != -1) {
//            if (name != null) {
//                fileName = name;
//            } else {
//                fileName = orgName + "_" + System.currentTimeMillis() + suffix;
//            }
//
////            } else {
////                fileName = orgName + "_" + System.currentTimeMillis();
////            }
//            String savePath = file.getPath() + File.separator + fileName;
//            OutputStream out = new FileOutputStream(savePath);
//            out.write(b);
//            out.flush();
//            out.close();
////            String imgurl=fileName;
//            //imageService.save(imgurl);
//            return Result.ok(fileName);
//        } catch (IOException e) {
//            e.printStackTrace();
//            return Result.error("上传图片失败");
//        }
//
//    }
//
//
//    /**
//     * 本地文件上传
//     *
//     * @param mf      文件
//     * @param bizPath 自定义路径
//     * @return
//     */
//    private String uploadLocal(MultipartFile mf, String bizPath) {
//        try {
//            String ctxPath = uploadpath;
//            String fileName = null;
//            File file = new File(ctxPath + File.separator + bizPath + File.separator);
//            if (!file.exists()) {
//                file.mkdirs();// 创建文件根目录
//            }
//            String orgName = mf.getOriginalFilename();// 获取文件名
//            orgName = getFileName(orgName);
//            if (orgName.indexOf(".") != -1) {
//                fileName = orgName.substring(0, orgName.lastIndexOf(".")) + orgName.substring(orgName.indexOf("."));
//            } else {
//                fileName = orgName;
//            }
//            String savePath = file.getPath() + File.separator + fileName;
//            File savefile = new File(savePath);
//            FileCopyUtils.copy(mf.getBytes(), savefile);
//            String dbpath = null;
//            if (oConvertUtils.isNotEmpty(bizPath)) {
//                dbpath = bizPath + File.separator + fileName;
//            } else {
//                dbpath = fileName;
//            }
//            if (dbpath.contains("\\")) {
//                dbpath = dbpath.replace("\\", "/");
//            }
//            return dbpath;
//        } catch (IOException e) {
//            log.error(e.getMessage(), e);
//        }
//        return "";
//    }
//    public static String getFileName(String fileName){
//        //判断是否带有盘符信息
//        // Check for Unix-style path
//        int unixSep = fileName.lastIndexOf('/');
//        // Check for Windows-style path
//        int winSep = fileName.lastIndexOf('\\');
//        // Cut off at latest possible point
//        int pos = (winSep > unixSep ? winSep : unixSep);
//        if (pos != -1)  {
//            // Any sort of path separator found...
//            fileName = fileName.substring(pos + 1);
//        }
//        //替换上传文件名字的特殊字符
//        fileName = fileName.replace("=","").replace(",","").replace("&","").replace("#", "");
//        //替换上传文件名字中的中文
////        if(ifContainChinese(fileName)){
////            fileName= PinyinUtil.getPinyin(fileName,  StrUtil.EMPTY);
////        }
//        //替换上传文件名字中的空格
//        fileName=fileName.replaceAll("\\s","");
//        return fileName;
//    }
//
//
//    /**
//     * 预览图片&下载文件
//     * 请求地址：http://localhost:8080/common/static/{user/20190119/e1fe9925bc315c60addea1b98eb1cb1349547719_1547866868179.jpg}
//     *
//     * @param request
//     * @param response
//     */
//    @GetMapping(value = "/static/**")
//    public void view(HttpServletRequest request, HttpServletResponse response) {
//        // ISO-8859-1 ==> UTF-8 进行编码转换
//        String imgPath = extractPathFromPattern(request);
//        if (oConvertUtils.isEmpty(imgPath) || imgPath == "null") {
//            return;
//        }
//        // 其余处理略
//        InputStream inputStream = null;
//        OutputStream outputStream = null;
//        try {
//            imgPath = imgPath.replace("..", "");
//            if (imgPath.endsWith(",")) {
//                imgPath = imgPath.substring(0, imgPath.length() - 1);
//            }
//            String filePath = uploadpath + File.separator + imgPath;
//            File file = new File(filePath);
//            if (!file.exists()) {
//                response.setStatus(404);
//                throw new RuntimeException("文件不存在..");
//            }
//            response.setContentType("application/force-download");// 设置强制下载不打开
//            response.addHeader("Content-Disposition", "attachment;fileName=" + new String(file.getName().getBytes("UTF-8"), "iso-8859-1"));
//            inputStream = new BufferedInputStream(new FileInputStream(filePath));
//            outputStream = response.getOutputStream();
//            byte[] buf = new byte[1024];
//            int len;
//            while ((len = inputStream.read(buf)) > 0) {
//                outputStream.write(buf, 0, len);
//            }
//            response.flushBuffer();
//        } catch (IOException e) {
//            log.error("预览文件失败" + e.getMessage());
//            response.setStatus(404);
//            e.printStackTrace();
//        } finally {
//            if (inputStream != null) {
//                try {
//                    inputStream.close();
//                } catch (IOException e) {
//                    log.error(e.getMessage(), e);
//                }
//            }
//            if (outputStream != null) {
//                try {
//                    outputStream.close();
//                } catch (IOException e) {
//                    log.error(e.getMessage(), e);
//                }
//            }
//        }
//
//    }
//
//
//    /**
//     * 下载文件
//     * 请求地址：http://localhost:8080/common/download/{user/20190119/e1fe9925bc315c60addea1b98eb1cb1349547719_1547866868179.jpg}
//     *
//     * @param request
//     * @param response
//     * @throws Exception
//     */
//    @GetMapping(value = "/download/**")
//    public void download(HttpServletRequest request, HttpServletResponse response) throws Exception {
//        // ISO-8859-1 ==> UTF-8 进行编码转换
//        String filePath = extractPathFromPattern(request);
//        // 其余处理略
//        InputStream inputStream = null;
//        OutputStream outputStream = null;
//        Environment environment = SpringContextUtils.getApplicationContext().getEnvironment();
//        String compressPath = environment.getProperty("qrcode.saveImg.compressPath");
//        //GenerateQrCodeUtil.deleteFiles(new File(String.valueOf(compressPath)));
//        try {
//            filePath = filePath.replace("..", "");
//            if (filePath.endsWith(",")) {
//                filePath = filePath.substring(0, filePath.length() - 1);
//            }
//            String downloadFilePath = compressPath + filePath;
//            File file = new File(downloadFilePath);
//            if (file.exists()) {
//                response.setContentType("application/force-download");// 设置强制下载不打开
//                response.addHeader("Content-Disposition", "attachment;fileName=" + new String(file.getName().getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
//                inputStream = new BufferedInputStream(new FileInputStream(file));
//                outputStream = response.getOutputStream();
//                byte[] buf = new byte[1024];
//                int len;
//                while ((len = inputStream.read(buf)) > 0) {
//                    outputStream.write(buf, 0, len);
//                }
//                response.flushBuffer();
//            }
//        } catch (Exception e) {
//            log.info("文件下载失败" + e.getMessage());
//        } finally {
//            if (inputStream != null) {
//                try {
//                    inputStream.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//            if (outputStream != null) {
//                try {
//                    outputStream.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//        }
//    }
//
//    /**
//     * 把指定URL后的字符串全部截断当成参数
//     * 这么做是为了防止URL中包含中文或者特殊字符（/等）时，匹配不了的问题
//     *
//     * @param request
//     * @return
//     */
//    private static String extractPathFromPattern(final HttpServletRequest request) {
//        String path = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
//        String bestMatchPattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
//        return new AntPathMatcher().extractPathWithinPattern(bestMatchPattern, path);
//    }
//
//}
